package com.xwj.common.util.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 错误码响应枚举
 *
 * 错误码组成：应用标识+功能模块+错误类型+错误编码
 * ● 应用标识(1位字母)
 * 	例如：用户中心：U；ERP系统：E
 *
 * ● 功能模块(2位数字)
 * 	例如：未分类：00；用户登录鉴权：01；……
 *
 * ● 错误类型(1位字母)
 * 	例如：认证授权：A；业务错误：B；缓存错误：C；数据库错误：D；文件IO错误：F；网络错误：N；其他错误：O；参数错误：P；RPC错误：R；系统错误：S；
 *
 * ● 错误编码(2位数字)
 * 		自增即可，每个模块的每种错误类型可以注册100个错误，如果使用合理的话，是完全够用的
 */
@Getter
@AllArgsConstructor
public enum CommonErrorEnum {

    /**
     * 成功
     */
    SUCCESS("000000", 200, "SUCCESS"),

    /**
     * 参数校验(Valid)异常
     */
    PARAM_VALID_ERROR("U00P01", 400, "参数校验异常"),
    /**
     * 参数绑定异常
     */
    PARAM_BIND_ERROR("U00P02", 400, "参数绑定异常"),
    /**
     * 参数约束检查异常
     */
    CONSTRAINT_VIOLATION_ERROR("U00P03", 400, "参数约束检查异常"),
    /**
     * Token无效
     */
    TOKEN_INVALID("U00A01", 401, "Token无效"),
    /**
     * Token已过期
     */
    TOKEN_EXPIRED("U00A02", 401, "Token已过期"),
    /**
     * 签名无效
     */
    SIGNATURE_INVALID("U00A03", 401, "签名无效"),
    /**
     * 用户名或密码错误
     */
    ENCRYPT_ERROR("U00A04", 401, "用户名或密码错误"),
    /**
     * 未授权访问
     */
    AUTH_INVALID("U00A05", 403, "未授权访问"),

    /**
     * 服务器繁忙，请稍后重试
     */
    SERVER_BUSY("U00S00", 500,"服务器繁忙"),
    /**
     * 未知异常，无法识别的异常
     */
    SERVER_ERROR("U00O99", 500, "未知异常"),

    /**
     * Servlet请求类异常
     */
    MethodArgumentTypeMismatchException("U00N01", 400, "方法参数类型不匹配异常"),
    MissingServletRequestPartException("U00N01", 400, "Servlet请求不完整异常"),
    MissingPathVariableException("U00N01", 400, "缺少路径变量异常"),
    MissingServletRequestParameterException("U00N01", 400, "缺少请求参数异常"),
    TypeMismatchException("U00N01", 400, "属性注入，类型不匹配异常"),
    ServletRequestBindingException("U00N01", 400, "请求绑定异常"),
    HttpMessageNotReadableException("U00N01", 400, "HTTP消息不可读异常"),
    NoHandlerFoundException("U00N02", 404, "资源找不到"),
    HttpRequestMethodNotSupportedException("U00N03", 405, "HTTP请求方式不受支持"),
    HttpMediaTypeNotAcceptableException("U00N04", 406, "找不到可接受的媒体表示形式（Content-Type）"),
    HttpMediaTypeNotSupportedException("U00N05", 415, "HTTP请求头的 Content-Type 不受支持"),
    ConversionNotSupportedException("U00N06", 500, "不支持转换异常"),
    HttpMessageNotWritableException("U00N07", 500, "HTTP消息不可写异常"),
    AsyncRequestTimeoutException("U00N08", 503, "异步请求超时异常"),
    ;

    /**
     * 返回码
     */
    private String code;
    /**
     * 状态码
     */
    private Integer http;
    /**
     * 返回消息
     */
    private String message;
//    /**
//     * 参考文档 （可选）
//     */
//    private String reference;
}
